 |
Technote 1119
Serial Port Apocrypha
ñ⁄éü
óºAPIÇÃã§í ì_
ÉVÉäÉAÉãÉ|Å[ÉgÇÃãåAPI
Open TransportÇÃAPI
óºÉAÅ[ÉrÉgÉåÅ[É^ÇÃï®åÍ
óvñÒ |
DZÇÃÉeÉbÉNÉmÅ[ÉgÇÕMac OSè„Ç≈ÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈç€ÇÃólÅXÇ»íçà”éñçÄDžǬǢǃâê‡ÇµÇ‹Ç∑ÅBDZÇÃÉeÉbÉNÉmÅ[ÉgÇ…ãLç⁄Ç≥ÇÍǃǢÇÈèÓïÒÇÕëºÇ≈LJåˆäJÇ≥ÇÍǃǢNjÇ∑Ç™ÅADZDZÇ≈ÇÕÇ∑Ç◊ǃÇÃíçà”ì_ÇàÍâ”èäÇ…Ç‹ÇΔÇflǃǢNjÇ∑ÅB
ãÔëÃìIÇ…ÇÕÉVÉäÉAÉãÉ|Å[ÉgÇÃãåAPIÇΔOpen TransportÇÃAPIÇégǡǃÅAÉVÉäÉAÉãÉ|Å[ÉgñºÇÃéÊìæÅAÉVÉäÉAÉãÉ|Å[ÉgÇÃÉIÅ[ÉvÉìÅAÉNÉçÅ[ÉYÅAǪǵǃè˜ÇÈç€ÇÃê≥ǵǢï˚ñ@Çê‡ñæÇµÇ‹Ç∑ÅBÇ‹ÇΩÅAãåÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç‚Open TransportÇÃÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇÃê›åvÇΔégÇ¢ï˚Çâê‡ÇµÇ‹Ç∑ÅB
DZÇÃÉeÉbÉNÉmÅ[ÉgÇÕÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈÇ∑Ç◊ǃÇÃÉfÉxÉçÉbÉpÇ™ëŒè€Ç≈Ç∑ÅB |
óºAPIÇÃã§í ì_
Mac OSÇ≈ÇÕÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈÇΩÇflÇÃAPIÇ™2ǬdžÇËÇ‹Ç∑ÅBÉfÉoÉCÉXÉ}ÉlÅ[ÉWÉÉÇÃ'DRVR' ÉhÉâÉCÉoÇå≥DžǵÇΩãåAPIÅiInside Macintosh: DevicesÇéQèΔÅjÇΔOpen TransportÇÃAPIÅiInside Macintosh: Open TransportÇéQèΔÅjÇ≈Ç∑ÅBà»â∫ÇÃ2ì_ÇÕóºAPIÇ™ëŒè€Ç≈Ç∑ÅB
ïKóvÇ»éûÇæÇØÉIÅ[ÉvÉìÅ^ÉNÉçÅ[ÉY
ÉRÉìÉsÉÖÅ[É^ÇÃÉVÉäÉAÉãÉ|Å[ÉgÇÕìØéûégópÇÃÇ≈ǴǻǢÉäÉ\Å[ÉXÇ≈Ç∑ÅBàÍǬÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÉVÉäÉAÉãÉ|Å[ÉgÇÉIÅ[ÉvÉìǵǃǢÇÈå¿ÇËÅAëºÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕǪÇÃÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ≈Ç´Ç‹ÇπÇÒÅBDZÇÃÇΩÇflÅAÉVÉäÉAÉãÉ|Å[ÉgÇÕïKóvÇ»éûÇæÇØÉIÅ[ÉvÉìǵǃÅAégÇ¢èIÇÌÇ¡ÇΩÇÁÉNÉçÅ[ÉYÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
ó·Ç¶ÇŒÅAÉÜÅ[ÉUìoò^ÇÃàÍä—ÇΔǵǃÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈÇÊǧǻÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅAÉÜÅ[ÉUìoò^ÇÃäJéníºëOÇ…ÉVÉäÉAÉãÉ|Å[ÉgÇÉIÅ[ÉvÉìǵǃÅAégÇ¢èIÇÌÇ¡ÇΩÇÁÇ∑ÇÆÇ…ÉNÉçÅ[ÉYǵNjÇ∑ÅB
ÉVÉäÉAÉãÉ|Å[ÉgÇè˜ÇÈ
ÉVÉäÉAÉãÉ|Å[ÉgÇÕéÛêgìIÇ…óòópÇ∑ÇÈDZÇΔÇ™â¬î\Ç≈Ç∑ÅBDZÇÃèÍçáÅAÉVÉäÉAÉãÉ|Å[ÉgÇóòópǵÇΩÇ¢ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁóvãÅǙdžÇÍÇŒÅAÉVÉäÉAÉãÉ|Å[ÉgÇè˜ÇÈDZÇΔÇ™â¬î\Ç≈Ç∑ÅBǪǵǃÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÉVÉäÉAÉãÉ|Å[ÉgÇégÇ¢èIÇÌÇ¡ÇΩÇÁÅAçƒÇ—ÉVÉäÉAÉãÉ|Å[ÉgÇéÛêgìIÇ…óòópÇ≈Ç´Ç‹Ç∑ÅB
ó·Ç¶ÇŒÅAAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÅiÉoÅ[ÉWÉáÉì2.1à»ëOÅjÇë“ÇøéÛÇØèÛë‘Ç…ÉZÉbÉgǵǃLJÅAFreePPPǻǫÇ≈PPPê⁄ë±Ç™çsǶNjÇ∑ÅBDZÇÍÇÕÅAAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÇ™FreePPPÇ…ÉVÉäÉAÉãÉ|Å[ÉgÇè˜Ç¡ÇƒÇ¢ÇÈÇ©ÇÁÇ≈Ç∑ÅBFreePPPÇ™ÉVÉäÉAÉãÉ|Å[ÉgÇï¬Ç∂ÇÈÇΔÅAAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÇÕçƒÇ—ÉVÉãÉAÉãÉ|Å[ÉgÇ…ÉAÉNÉZÉXǵǃÅAë“ÇøéÛÇØèÛë‘ÇΔÇ»ÇËÇ‹Ç∑ÅB
ÉVÉäÉAÉãÉ|Å[ÉgÇÃãåAPI
ÉVÉäÉAÉãÉ|Å[ÉgÇÃãåAPIÇÕInside Macintosh: DevicesÇ…ãLèqÇ≥ÇÍǃǢÇÈí ÇËÅAÉfÉoÉCÉXÉ}ÉlÅ[ÉWÉÉÇÃÉhÉâÉCÉo'DRVR' Çå≥DžǵǃǢNjÇ∑ÅBDZDZÇ≈ÇÕÉVÉäÉAÉãÉ|Å[ÉgÇÃãåAPIÇ≈ÉVÉäÉAÉãÉ|Å[ÉgñºÇÃéÊìæÅAÉVÉäÉAÉãÉ|Å[ÉgÇÃÉIÅ[ÉvÉìÅAÉNÉçÅ[ÉYÅAǪǵǃè˜ÇÈç€ÇÃê≥ǵǢï˚ñ@Çê‡ñæÇµÇ‹Ç∑ÅB
ÉVÉäÉAÉãÉ|Å[ÉgñºÇÃéÊìæ
ì¡íËÇÃÉRÉìÉsÉÖÅ[É^Ç≈óòópÇ≈Ç´ÇÈÉVÉäÉAÉãÉ|Å[ÉgÇÃàÍóóÇìæÇÈÇ…ÇÕCommunications ToolboxÇÃàÍïîÇ≈džÇÈCommunications Resource ManagerÅiCRMÅjÇÃCRMSearch () ä÷êîÇóòópǵNjÇ∑ÅBécîOǻǙÇÁÅACommunications Resource ManagerÇÃï∂å£ÅiInside the Macintosh Communications ToolboxÅjÇÕÉIÉìÉâÉCÉìÇ≈Ç≤óóÇ…Ç»ÇÍǻǢÇÃÇ≈ÅACRMSearch () DžǬǢǃÇÃê‡ñæÇíTÇ∑ÇÃÇ…ãÍòJÇ∑ÇÈǩLJǵÇÍÇ‹ÇπÇÒÅBDZDZÇ≈ÇÕCRMSearch () ÇóòópÇ∑ÇÈç€ÇÃÉTÉìÉvÉãÉRÅ[ÉhÇópà”ǵNjǵÇΩÇÃÇ≈ÅAéQçlDžǵǃâ∫Ç≥Ç¢ÅB
|
static void PrintInfoAboutAllSerialPorts (void)
// DZÇÃÉRÉìÉsÉÖÅ[É^Ç≈óòópÇ≈Ç´ÇÈÉVÉäÉAÉãÉ|Å[ÉgÇÃÉäÉXÉg
// ÇèoóÕǵNjÇ∑ÅBÉVÉäÉAÉãÉ|Å[ÉgñºÅAì¸óÕÉhÉâÉCÉoñºÅA
// èoóÕÉhÉâÉCÉoñºÇstdoutÇ…èoóÕǵNjÇ∑ÅBàÍî ìIÇ…ÇÕà»â∫
// ÇÃÇÊǧǻÉRÅ[ÉhÇégǡǃÅAÉVÉäÉAÉãÉ|Å[ÉgÇÃÉ|ÉbÉvÉAÉbÉv
// ÉÅÉjÉÖÅ[Çç\ízǵNjÇ∑ÅB
{
CRMRec commRecord;
CRMRecPtr thisCommRecord;
CRMSerialPtr serialPtr;
(void) InitCRM ();
// ÉVÉäÉAÉãÉ|Å[ÉgÇÃÇ›Çï‘Ç∑ÇÊǧÅAcommRecordÇê›íËǵNjÇ∑ÅB
commRecord.crmDeviceType = crmSerialDevice;
commRecord.crmDeviceID = 0;
// CRMSearch ()ÇåJÇËï‘ǵåƒÇ—èoǵǃÅAÇ∑Ç◊ǃÇÃÉVÉäÉAÉãÉ|Å[ÉgÇÃ
// èÓïÒÇìæÇ‹Ç∑ÅB
thisCommRecord = &commRecord;
do {
thisCommRecord = (CRMRecPtr) CRMSearch ((CRMRecPtr) thisCommRecord);
if (thisCommRecord != nil) {
// ÉVÉäÉAÉãÉ|Å[ÉgÇÃCRMRecÇìæÇΩÇÁÅAcrmAttributesÉtÉBÅ[ÉãÉhÇ
// CRMSerialPtrÇ…ÉLÉÉÉXÉgǵǃÅAÉVÉäÉAÉãÉ|Å[ÉgÇÃèÓïÒÉtÉBÅ[ÉãÉhÇ…
// ÉAÉNÉZÉXǵNjÇ∑ÅB
serialPtr = (CRMSerialPtr) thisCommRecord->crmAttributes;
// DZÇÃÉVÉäÉAÉãÉ|Å[ÉgÇÃèÓïÒÇèoóÕÇ∑ÇÈÅB
printf ("We have a port called: "%#s"\n", *(serialPtr->name));
printf (" input driver named: "%#s"\n", *(serialPtr->inputDriverName));
printf (" output driver named: "%#s"\n", *(serialPtr->outputDriverName));
printf ("\n");
// CRMSearch ()Ç™éüÇÃÉfÉoÉCÉXÇï‘Ç∑ÇÊǧDžéwíËÇ∑ÇÈÅB
commRecord.crmDeviceID = thisCommRecord->crmDeviceID;
}
} while (thisCommRecord != nil);
}
|
?/TD>
|
íêÅF
CRMÇÕÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉAÉoÅ[ÉWÉáÉì7.0à»ç~Ç…ïWèÄìãç⁄Ç≥ÇÍǃǢNjÇ∑ÅBÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉAÉoÅ[ÉWÉáÉì6Ç≈ÇÕÉIÉvÉVÉáÉìÇ»ÇÃÇ≈ÅAÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉAÉoÅ[ÉWÉáÉì6Ç≈ìÆçÏÇ∑ÇÈêªïiÇäJî≠Ç∑ÇÈèÍçáÇÕCRMÇ™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈDZÇΔÇämîFÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBGestalt () ä÷êîÇÃgestaltCRMAttr ÉZÉåÉNÉ^ÇégǡǃÅAgestaltCRMPresent ÉtÉâÉOÇ™ÉZÉbÉgÇ≥ÇÍǃǢÇÈDZÇΔÇämîFǵǃâ∫Ç≥Ç¢ÅB |
èdóvÅF
CRMÇ…ìoò^Ç≥ÇÍǃǢÇÈÉVÉäÉAÉãÉ|Å[ÉgÇÕïWèÄÇÃÉVÉäÉAÉãÉ|Å[ÉgÇΔìØÇ∂ÇÊǧDžìÆçÏÇ∑ÇÈÇÕÇ∏Ç≈Ç∑ÅBǵǩǵÅAïWèÄÉVÉäÉAÉãÉ|Å[ÉgÇÃìÆçÏÇåµñßÇ…çƒåªÇ≈ǴǻǢèÍçáǙdžÇËÇ‹Ç∑ÅiÉAÉbÉvÉãÉRÉìÉsÉÖÅ[É^Ç‚ÉTÅ[ÉhÉpÅ[ÉeÉBÇÃêªïiÇä‹ÇfiÅjÅBCRMÇ…ìoò^Ç≥ÇÍǃǢÇÈÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈèÍçáÇÕDZÇÃÇÊǧǻêßå¿Ç…íçà”ǵǃâ∫Ç≥Ç¢ÅBó·Ç¶ÇŒÅAMIDIånÇÃäOïîÉNÉçÉbÉNÉÇÅ[ÉhÅicsCode 15 ÅjÇóòópÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅAÉVÉäÉAÉãÉ|Å[ÉgÇ™äOïîÉNÉçÉbÉNÉÇÅ[ÉhÇéÛÇØïtÇØÇ»Ç¢éñë‘LJëzíËǵǃê›åvÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB |
ÉVÉäÉAÉãÉ|Å[ÉgÇÃÉIÅ[ÉvÉì
ÉVÉäÉAÉãÉ|Å[ÉgÇÃê≥ǵǢÉIÅ[ÉvÉìÇÃédï˚ÇÕMac OS SDKÇÃCDÇ…ä‹Ç‹ÇÍǃǢÇÈARA APIÇÃï∂å£Ç…ãLèqÇ≥ÇÍǃǢNjÇ∑ÅBǵǩǵÅAdžNjÇËDžLJêlñ⁄DžǬǩǻǢï∂å£Ç»è„Ç…ÉTÉìÉvÉãÉRÅ[ÉhLJå√Ç¢ÇÃÇ≈ÅAà»â∫Ç…ìØÇ∂ì‡óeÇçƒìxãLèqǵNjÇ∑ÅB
ÉãÅ[ÉãÇÕéäǡǃä»íPÇ≈Ç∑ÅF
ÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç™ë∂ç›Ç∑ÇÈèÍçáÇÕOpenDriver () Çíºê⁄åƒÇ—èoǵǃÉVÉäÉAÉãÉ|Å[ÉgÇäJÇØÅBë∂ç›ÇµÇ»Ç¢èÍçáÇÕÉÜÉjÉbÉgÉeÅ[ÉuÉãÇéQèΔǵǃÅAÉhÉâÉCÉoÇ™ä˘Ç…äJǢǃǢǻǢèÍçáÇæÇØÉVÉäÉAÉãÉ|Å[ÉgÇäJÇØÅB
à»â∫ÇÃÉTÉìÉvÉãÉRÅ[ÉhÇ≈ÇÕDZÇÃÉãÅ[ÉãÇ…è]ǡǃÉVÉäÉAÉãÉ|Å[ÉgÇäJǢǃǢNjÇ∑ÅB |
static OSErr OpenOneSerialDriver (ConstStr255Param driverName, short *refNum)
// ÉVÉäÉAÉãÉhÉâÉCÉoÇÃê≥ǵǢÉIÅ[ÉvÉìÇÃédï˚ÅBÇ‹Ç∏ÅAÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç™
// ë∂ç›Ç∑ÇÈǩǫǧǩÇämîFǵNjÇ∑ÅBë∂ç›Ç∑ÇÈèÍçáÇÕǢǴǻÇËOpenDriver ()Ç
// åƒÇ—èoǵǃÅAÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç…îªífÇîCÇπÇ‹Ç∑ÅBÉVÉäÉAÉã
// ÉAÅ[ÉrÉgÉåÅ[É^Ç™ë∂ç›ÇµÇ»Ç¢èÍçáÇÕÉÜÉjÉbÉgÉeÅ[ÉuÉãÇå©ÇƒÅAÉhÉâÉCÉoÇ™ä˘Ç…
// äJǢǃǢÇÈǩǫǧǩÇämîFǵNjÇ∑ÅB
{
OSErr err;
if (SerialArbitrationExists ()) {
err = OpenDriver (driverName, refNum);
} else {
if (DriverIsOpen (driverName)) {
err = portInUse;
} else {
err = OpenDriver (driverName, refNum);
}
}
return err;
}
static OSErr OpenSerialDrivers (ConstStr255Param inName, ConstStr255Param outName,
SInt16 *inRefNum, SInt16 *outRefNum)
// ÉVÉäÉAÉãÉ|Å[ÉgÇÃì¸óÕÇΔèoóÕÉhÉâÉCÉoÇÉIÅ[ÉvÉìǵǃÅAäeÅXÇÃrefNumÇï‘ǵNjÇ∑ÅB
// Ç«ÇøÇÁÇ©ÇÃÉhÉâÉCÉoÇ™ÉIÅ[ÉvÉìÇ≈ǴǻǩǡÇΩèÍçáÇÕrefNumÇ™óºï˚ÇΔLJÉ[ÉçÇΔÇ»ÇËÇ‹Ç∑ÅB
{
OSErr err;
err = OpenOneSerialDriver (outName, outRefNum);
if (err == noErr) {
err = OpenOneSerialDriver (inName, inRefNum);
if (err != noErr) {
(void) CloseDriver (*outRefNum);
}
}
if (err != noErr) {
*inRefNum = 0;
*outRefNum = 0;
}
return err;
}
|
?/TD>
| è„ãLÇÃÉTÉìÉvÉãÉRÅ[ÉhÇ≈ÇÕÅAèoóÕÉhÉâÉCÉoÇêÊÇ…ÉIÅ[ÉvÉìǵǃǢNjÇ∑ÅBïWèÄÉVÉäÉAÉãÉ|Å[ÉgÇÃÉhÉâÉCÉoǂǪÇÃëºÇÃCRMìoò^ÉhÉâÉCÉoÇÉIÅ[ÉvÉìÇ∑ÇÈèÍçáÇÕèoóÕÉhÉâÉCÉoÇêÊÇ…ÉIÅ[ÉvÉìǵǃâ∫Ç≥Ç¢ÅBDZÇÍÇÕÅAèoóÕÉhÉâÉCÉoÇ™ÉVÉXÉeÉÄÉäÉ\Å[ÉXÇÃämï€Ç‚ÉVÉäÉAÉãÉ|Å[ÉgÇÃóòópèÛãµÇÃämîFÇçsǡǃǢÇÈÇ©ÇÁÇ≈Ç∑ÅBïWèÄÉVÉäÉAÉãÉ|Å[ÉgÇÃèÍçáÅAèoóÕÉhÉâÉCÉoÇ™ÉGÉâÅ[Ç»Ç≠ÉIÅ[ÉvÉìÇ≈Ç´ÇΩÇÁÅAì¸óÕÉhÉâÉCÉoLJïKÇ∏ÉIÅ[ÉvÉìÇ≈Ç´ÇÈÇÕÇ∏Ç≈Ç∑ÅBÇΩÇæÇµÅACRMÇ…ìoò^Ç≥ÇÍǃǢÇÈÉhÉâÉCÉoÇ™Ç∑Ç◊ÇƒÇªÇ§ÇæÇΔÇÕå¿ÇÁǻǢÇÃÇ≈ÅAïKÇ∏OpenDriver () ÇÃï‘Ç∑ílÇÉ`ÉFÉbÉNǵǃâ∫Ç≥Ç¢ÅB
ÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç™ë∂ç›Ç∑ÇÈǩǫǧǩÇÕà»â∫ÇÃÇÊǧDžîªífǵNjÇ∑ÅB
enum {
gestaltSerialPortArbitratorAttr = 'arb ',
gestaltSerialPortArbitratorExists = 0
};
static Boolean SerialArbitrationExists(void)
// Gestalt ()ä÷êîÇégǡǃÅAÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ǙDZÇÃ
// ÉRÉìÉsÉÖÅ[É^Ç≈ë∂ç›Ç∑ÇÈǩǫǧǩÇämîFǵNjÇ∑ÅB
{
Boolean result;
long response;
result = (Gestalt (gestaltSerialPortArbitratorAttr, &response) == noErr &&
(response & (1 << gestaltSerialPortArbitratorExists) != 0) != 0));
return result;
}
|
ç≈å„Ç…ïKóvÇ»ÇÃÇÕÅADriverIsOpen () ÇΔåæÇ§ä÷êîÇ≈Ç∑ÅBDZÇÃä÷êîÇÕÉfÉoÉCÉXÇÃÉÜÉjÉbÉgÉeÅ[ÉuÉãÇéQèΔǵǃÅAì¡íËÇÃÉVÉäÉAÉãÉhÉâÉCÉoÇ™ä˘Ç…ÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÈǩǫǧǩÇämîFǵNjÇ∑ÅBDZÇÃä÷êîÇÕÉçÅ[ÉÅÉÇÉäïœêîÇíºê⁄óòópǵǃǢÇÈÇΩÇfló«Ç¢ÉRÅ[Éhó·ÇΔÇÕåæÇ¶Ç‹ÇπÇÒÇ™ÅAÉVÉãÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç™ë∂ç›ÇµÇ»Ç¢èÍçáÇÃÇ›é¿çsÇ≥ÇÍÇÈÇÃÇ≈ÅAdžNjÇËóòópÇ≥ÇÍǻǢDZÇΔÇä˙ë“Ç≈Ç´Ç‹Ç∑ÅB |
static Boolean DriverIsOpen (ConstStr255Param driverName)
// éwíËÇ≥ÇÍÇΩÉhÉâÉCÉoÇÉÜÉjÉbÉgÉeÅ[ÉuÉãì‡Ç≈íTǵèoǵǃÅA
// ä˘Ç…ÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÍÇŒtrueÇï‘ǵNjÇ∑ÅBÉhÉâÉCÉoÇ™
// ÉIÅ[ÉvÉìÇ≥ÇÍǃǢǻǢèÍçáÇ‚ë∂ç›ÇµÇ»Ç¢èÍçáÇÕfalseÇ
// ï‘ǵNjÇ∑ÅB
{
Boolean found;
Boolean isOpen;
short unit;
DCtlHandle dceHandle;
StringPtr namePtr;
found = false;
isOpen = false;
unit = 0;
while (!found && (unit < LMGetUnitTableEntryCount ())) {
// Device Control EntryÇÃÉnÉìÉhÉãÇìæÇÈÅBGetDCtlEntry ()
// ÇÕÉhÉâÉCÉorefNumÇéÛÇØïtÇØÇÈÇÃÇ≈ÅANOTÇégǡǃ
// ÉÜÉjÉbÉgî‘çÜÇ©ÇÁìæÇ‹Ç∑ÅB
dceHandle = GetDCtlEntry (~unit);
if (dceHandle != nil && (**dceHandle).dCtlDriver != nil) {
// RAMÉxÅ[ÉXÉhÉâÉCÉoÇÃèÍçáÅAdCtlDriverÇÕÉnÉìÉhÉãÇ≈Ç∑ÅB
// ǪÇÍà»äOÇÃèÍçáÇÕÉ|ÉCÉìÉ^àµÇ¢Ç≈Ç∑ÅB
if (((**dceHandle).dCtlFlags & dRAMBasedMask) != 0) {
namePtr = &(**((DRVRHeaderHandle) (**dceHandle).dCtlDriver)).drvrName [0];
} else {
namePtr = &(*((DRVRHeaderPtr) (**dceHandle).dCtlDriver)).drvrName [0];
}
// ÉhÉâÉCÉoñºÇÃÉ|ÉCÉìÉ^ÇìæÇΩÇÁÅAÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÈǩǫǧǩÇÕ
// ÉtÉâÉOÇéQèΔǵǃämîFǵNjÇ∑ÅB
if (EqualString (driverName, namePtr, false, true)) {
found = true;
isOpen = ((**dceHandle).dCtlFlags & dOpenedMask) != 0;
}
}
unit += 1;
}
return isOpen;
}
|
?/TD>
|
íêÅF
ÉçÅ[ÉÅÉÇÉäÉAÉNÉZÉXä÷êîLMGetUnitTableEntryCount () ÇÕ"LoMem.h"Ç≈íËã`Ç≥ÇÍǃǢNjÇ∑Ç™ÅAInterfaceLibÇ≈ÇÕÉGÉNÉXÉ|Å[ÉgÇ≥ÇÍǃǢNjÇπÇÒÅBUniversal Interfaces 2.xÇå≥Ç…CFMÉRÅ[ÉhÇÉrÉãÉhǵÇÊǧÇΔÇ∑ÇÈÇΔÉäÉìÉNÇÃç€Ç…ÉGÉâÅ[ÇΔÇ»ÇËÇ‹Ç∑ÅBDZÇÃèÍçáÇÕÉçÅ[ÉÅÉÇÉäÉAÉNÉZÉXä÷êîÇìΔé©Ç…èëÇ≠Ç©ÅAêVÇΩÇ…É}ÉNÉçÇ™â¡Ç¶ÇÁÇÍÇΩUniversal Interfaces 3.xÇÇ®égÇ¢â∫Ç≥Ç¢ÅB |
ÉVÉäÉAÉãÉ|Å[ÉgÇÃÉNÉçÅ[ÉY
ÉVÉäÉAÉãÉ|Å[ÉgÇÃÉIÅ[ÉvÉìÇ…ê¨å˜ÇµÇΩÇÁÅAégÇ¢èIÇÌÇ¡ÇΩéûì_Ç≈ïKÇ∏ÉNÉçÅ[ÉYǵǃâ∫Ç≥Ç¢ÅBÉVÉäÉAÉãÉ|Å[ÉgÇÃÉNÉçÅ[ÉYÇÕCloseDriver
() Ç≈çsǢNjÇ∑ÅBÇ‹ÇΩÅAì¸óÕÇΔèoóÕÉhÉâÉCÉoÇÃóºï˚ÇÉNÉçÅ[ÉYÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBà»â∫ÇÃÉTÉìÉvÉãÉRÅ[ÉhÇÕÉVÉäÉAÉãÉ|Å[ÉgÇÃê≥ǵǢÉNÉçÅ[ÉYÇÃédï˚Ç≈Ç∑ÅB
static OSErr CloseSerialDrivers(SInt16 inRefNum, SInt16 outRefNum)
{
OSErr err;
(void) KillIO(inRefNum);
err = CloseDriver(inRefNum);
if (err == noErr) {
(void) KillIO(outRefNum);
(void) CloseDriver(outRefNum);
}
return err;
}
|
ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ê≥èÌèIóπǵǻǩǡÇΩèÍçáÇ≈LJÉVÉäÉAÉãÉ|Å[ÉgÇÃÉhÉâÉCÉoÇÕÉNÉçÅ[ÉYǵǃâ∫Ç≥Ç¢ÅBÉVÉäÉAÉãÉ|Å[ÉgÇÃÉhÉâÉCÉoÇÉNÉçÅ[ÉYǵǻǢNjNjÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™èIóπǵǃǵNjǧÇΔÅAëºÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÉRÉìÉsÉÖÅ[É^ÇçƒãNìÆÇ∑ÇÈÇ‹Ç≈ÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ≈Ç´Ç‹ÇπÇÒÅB
ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ê≥èÌèIóπǵǻǩǡÇΩèÍçáÇ≈LJÉVÉäÉAÉãÉ|Å[ÉgÇÃÉhÉâÉCÉoÇämé¿Ç…ÉNÉçÅ[ÉYÇ∑ÇÈï˚ñ@ÇÕà»â∫ÇÃÇÊǧǻLJÇÃǙdžÇËÇ‹Ç∑ÅB
- CFMÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃèÍçáÇÕÅACFMÉtÉâÉOÉÅÉìÉgÇÃèIóπä÷êîÇégǡǃÉVÉäÉAÉãÉ|Å[ÉgÇÃÉNÉçÅ[ÉYÇ™â¬î\Ç≈Ç∑ÅBè⁄ǵÇ≠ÇÕInside Macintosh: PowerPC System SoftwareÇÇ≤óóâ∫Ç≥Ç¢ÅB
- Thread ManagerÇ™ë∂ç›Ç∑ÇÈèÍçáÇÕÅA
SetThreadTerminator () Ç≈ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉÅÉCÉìÉXÉåÉbÉhÇÃèIóπä÷êîÇéwíËÇ∑ÇÈDZÇΔÇ™â¬î\Ç≈Ç∑ÅB
- è„ãLÇÃï˚ñ@Ç™égǶǻǢèÍçáÇ≈LJÅA
ExitToShell () ÇÉpÉbÉ`Ç∑ÇÈDZÇΔÇ™â¬î\Ç≈Ç∑ÅB
íêÅF
Inside Macintosh II Åi247Å`250ÉyÅ[ÉWÅjÇÕRAMÇΔROMÇÃÉVÉäÉAÉãÉhÉâÉCÉoÇÃà·Ç¢Ç‚RAMSDOpen () ÇΔRAMSDClose () DžǬǢǃâê‡ÇµÇƒÇ¢Ç‹Ç∑Ç™ÅAåªç›ÇÃMac OSÇ…ÇÕìKâûǵǻǢÇÃÇ≈ÅADZÇÍÇÁÇÃãLèqÇÕñ≥éãǵǃâ∫Ç≥Ç¢ÅB |
ÉVÉäÉAÉãÉ|Å[ÉgÇè˜ÇÈ
ÉVÉäÉAÉãÉ|Å[ÉgÇÃãåAPIÇ≈ÇÕÅAÉVÉäÉAÉãÉ|Å[ÉgÇéÛêgìIÇ…óòópǵǃÉ_ÉCÉiÉ~ÉbÉNÇ…ëºÉvÉçÉOÉâÉÄÇ…è˜ÇÈDZÇΔÇ…ä÷ǵǃÅAÇŸÇΔÇÒÇ«ÉTÉ|Å[ÉgÇ≥ÇÍǃǢǻǢÇΔçlǶǃó«Ç¢Ç≈ǵÇÂǧÅBAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÇÕLink Tool ManagerÇÃAPIÇégǡǃÉVÉäÉAÉãÉ|Å[ÉgÇä«óùǵǃǢNjÇ∑Ç™ÅAÉAÉbÉvÉãÉRÉìÉsÉÖÅ[É^ÇÕDZÇÃAPIÇåˆäJǵǃǢNjÇπÇÒÇÃÇ≈ÅAóòópÇ∑ÇÈDZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB
ÉVÉäÉAÉãÉ|Å[ÉgÇéÛêgìIÇ…óòópǵǃäéǬëºÉvÉçÉZÉXÇ…è˜ÇÈïKóvǙdžÇÈèÍçáÇÕOpen TransportÇÃÉVÉäÉAÉãÉ|Å[ÉgAPIÇégǡǃâ∫Ç≥Ç¢ÅB
Open TransportÇÃAPI
Mac OSè„ÇÃÉVÉäÉAÉãí êMÇÃLJǧàÍǬÇÃAPIÇÕÉlÉbÉgÉèÅ[ÉNä÷åWÇÃAPIÇΔÇÊÇ≠éóǃǢÇÈOpen TransportÇÃAPIÇ≈Ç∑ÅBOpen TransportÇÃåªÉoÅ[ÉWÉáÉìÅiDZÇÃÉeÉbÉNÉmÅ[ÉgÇ™èëÇ©ÇÍÇΩéûÇÕ1.3ÅjÇÕÅAãåÉVÉäÉAÉãÉhÉâÉCÉoÇÃè„Ç≈ìÆÇ≠ÉåÉCÉÑÅ[ÇΔǻǡǃǢNjÇ∑ÅBǬNjÇËÅAÇ«ÇøÇÁÇÃAPIÇégǡǃLJÅAÉVÉäÉAÉãÉ|Å[ÉgÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìä‘Ç≈ǧNjÇ≠ã§óLÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
Open TransportÇÃàÍî ìIÇ»ê‡ñæÇ…ǬǢǃÇÕInside
Macintosh: Open TransportÇÇ≤óóâ∫Ç≥Ç¢ÅB
ÉVÉäÉAÉãÉ|Å[ÉgñºÇÃéÊìæ
Open TransportÇÃÉVÉäÉAÉãí êMAPIÇégǧèÍçáÇÕÅAOTGetIndexedPort () ÇÉãÅ[ÉvÇ≈åƒÇ—èoǵǃÅAÉ|Å[ÉgéÌï Ç™kOTSerialDevice ÇÃï®ÇíTǵNjÇ∑ÅBà»â∫ÇÃÉTÉìÉvÉãÉRÅ[ÉhÇÇ≤óóâ∫Ç≥Ç¢ÅB
|
static OSStatus PrintSerialPortInfo (const OTPortRecord *portRecord)
// portRecordÇÃÉVÉäÉAÉãÉ|Å[ÉgèÓïÒÇèoóÕǵNjÇ∑ÅB
{
Str255 userVisibleName;
// OTGetUserPortNameFromPortRef ()ÇÕ<OpenTptConfig.h>Ç≈íËã`Ç≥ÇÍǃǢÇÈÅA
// džNjÇËímÇÁÇÍǃǢǻǢä÷êîÇ≈Ç∑ÅBǵǩǵÅAOpen TransportÇÃÉ|Å[ÉgñºÇ
// ìæÇÈÇÃÇ…îÒèÌÇ…ï÷óòÇ≈Ç∑ÅB
OTGetUserPortNameFromPortRef (portRecord->fRef, userVisibleName);
printf ("Found a serial port with port reference $%08lx:\n", portRecord->fRef);
printf (" User visible name is "%#s".\n", userVisibleName);
printf (" String to pass to OTCreateConfiguration is "%s".\n", portRecord->fPortName);
printf (" Name of provider module is "%s".\n", portRecord->fModuleName);
printf ("\n");
return kOTNoError;
}
static OSStatus OTFindSerialPorts (void)
// Open TransportÇégǡǃÅAóòópâ¬î\Ç»ÉVÉäÉAÉãÉ|Å[ÉgÇÃÉäÉXÉgÇèoóÕǵNjÇ∑ÅB
{
OSStatus err;
Boolean portValid;
SInt32 portIndex;
OTPortRecord portRecord;
UInt16 deviceType;
// portIndexÇÕÉ[ÉçÇ©ÇÁäJénǵǃÅAÉVÉäÉAÉãÉ|Å[ÉgÇÃêîÇí¥Ç¶ÇÈÇ‹Ç≈ÅA
// OTGetIndexedPort ()ÇåƒÇ—èoǵNjÇ∑ÅB
portIndex = 0;
err = kOTNoError;
do {
portValid = OTGetIndexedPort (&portRecord, portIndex);
if (portValid) {
// óLå¯Ç»É|Å[ÉgDžǬǢǃÅAéÌï ÇìæÇ‹Ç∑ÅBÉVÉäÉAÉãÉ|Å[ÉgÇ≈džÇÍÇŒÅA
// ÉGÉCÉäÉAÉXÇ≈ÇÕǻǢDZÇΔÇæÇØämîFǵǃÅAPrintSerialPort ()Ç
// åƒÇ—èoǵǃÅAÉ|Å[ÉgèÓïÒÇèoóÕǵNjÇ∑ÅBÉGÉCÉäÉAÉXLJä‹ÇÒÇ≈ǵNjǧÇΔ
// ïWèÄÉfÉXÉNÉgÉbÉvã@ÇÃèÍçáÇÕ3ǬÇÃÉVÉäÉAÉãÉ|Å[ÉgÇ™èoóÕÇ≥ÇÍÇ‹Ç∑ÅF
// ÅuserialAÅvÅAÅuserialBÅvÅAÅuserialÅvÅB
deviceType = OTGetDeviceTypeFromPortRef (portRecord.fRef);
if (deviceType == kOTSerialDevice &&
(portRecord.fInfoFlags & kOTPortIsAlias) == 0) {
err = PrintSerialPortInfo (&portRecord);
}
}
portIndex += 1;
} while (portValid && err == kOTNoError);
return err;
}
|
?/TD>
|
Open Transport 1.1.1à»ç~Ç≈ÇÕÅACRMÇÃÉVÉäÉAÉãÉ|Å[ÉgÇÕé©ìÆìIÇ…Open TransportÇÃÉVÉäÉAÉãÉ|Å[ÉgÇΔǵǃLJìoò^Ç≥ÇÍÇ‹Ç∑ÅBè]ǡǃÅAì‡ë†ÉVÉäÉAÉãÉ|Å[ÉgÇΔÉTÅ[ÉhÉpÅ[ÉeÉBÇÃÉVÉäÉAÉãÉ|Å[ÉgÇÕè„ãLÇÃÉTÉìÉvÉãÉRÅ[ÉhÇ…ÇÊǡǃîFéØÇ≥ÇÍÇ‹Ç∑ÅBGestalt () ä÷êîÇégǶnjÅAÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈOpen TransportÇÃÉoÅ[ÉWÉáÉìÇ™ìæÇÁÇÍÇ‹Ç∑ÅBè⁄ǵÇ≠ÇÕDTS Q&A NW 41 "Gestalt Selectors for Mac Networking"ÇÇ≤óóâ∫Ç≥Ç¢ÅB
ÉVÉäÉAÉãÉ|Å[ÉgÇÃÉIÅ[ÉvÉì
égópÇ∑ÇÈÉVÉäÉAÉãÉ|Å[ÉgÇåàÇflÇΩÇÁÅAOTOpenEndpoint () Ç≈ǪÇÃÉVÉäÉAÉãÉ|Å[ÉgÇ…ëŒÇ∑ÇÈÉGÉìÉhÉ|ÉCÉìÉgÇçÏê¨ÇµÇ‹Ç∑ÅBDZÇÃéûì_Ç≈ÉVÉäÉAÉãÉhÉâÉCÉoÇÕÇ‹ÇæÉIÅ[ÉvÉìÇ≥ÇÍǻǢÇÃÇ≈à¿êSÇ≈Ç∑ÅBOpen TransportÇÕÅAÉGÉìÉhÉ|ÉCÉìÉgÇé¿ç€Ç…ê⁄ë±Ç∑ÇÈÇ‹Ç≈ÉVÉäÉAÉãÉ|Å[ÉgÇÃÉhÉâÉCÉoÇÉIÅ[ÉvÉìǵNjÇπÇÒÅB
ÉVÉäÉAÉãÉ|Å[ÉgÇïÅí Ç…égópÇ∑ÇÈÇ…ÇÕqlen = 0 Ç≈OTBind () ÇåƒÇ—èoǵǃÅAà¯Ç´ë±Ç´OTConnect () ÇåƒÇ—èoǵNjÇ∑ÅBÉVÉäÉAÉãÉ|Å[ÉgÇÕOTConnect () ÇåƒÇ—èoÇ∑Ç‹Ç≈ÉIÅ[ÉvÉìÇ≥ÇÍÇ‹ÇπÇÒÅB
ÉVÉäÉAÉãÉ|Å[ÉgÇéÛêgìIÇ…égópÇ∑ÇÈèÍçáÇÕqlen = 1 Ç≈OTBind () ÇåƒÇ—èoǵNjÇ∑ÅBDZÇÃèÍçáÅAÉVÉäÉAÉãÉ|Å[ÉgÇÕÇ∑ÇÆÇ…ÉIÅ[ÉvÉìÇ≥ÇÍÇ‹Ç∑ÅBǪǵǃÅAÉVÉäÉAÉãÉ|Å[ÉgåoóRÇ≈ÉfÅ[É^Ç™ëóÇÁÇÍǃÇ≠ÇÈÇΔÅAÉRÅ[ÉãÉoÉbÉNä÷êîÇ…T_LISTEN ÉCÉxÉìÉgÇ™ëóêMÇ≥ÇÍÇ‹Ç∑ÅB
ÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈèÍçáÇÕÅAÉVÉäÉAÉãÉ|Å[ÉgÇ…ä÷Ç∑ÇÈèdóvÇ»í ímÇéÛÇØÇÈÇΩÇflÅAOTRegisterAsClient () ÇåƒÇ—èoǵǃOpen TransportÇÃÉNÉâÉCÉGÉìÉgÇΔǵǃÉvÉçÉOÉâÉÄÇìoò^ǵǃâ∫Ç≥Ç¢ÅBãÔëÃìIÇ…ÇÕÅAkOTYieldPortRequest ÅiÉVÉäÉAÉãÉ|Å[ÉgÇè˜ÇÈÇéQèΔÅjÅAkOTProviderIsDisconnected ÅAkOTProviderIsReconnected ÇÃí ímÇìKêÿÇ…èàóùÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
ÉVÉäÉAÉãÉ|Å[ÉgÇÃÉNÉçÅ[ÉY
ÉVÉäÉAÉãÉ|Å[ÉgÇégÇ¢èIÇÌÇ¡ÇΩÇÁÅAïKÇ∏ÉNÉçÅ[ÉYǵǃâ∫Ç≥Ç¢ÅBÉVÉäÉAÉãÉ|Å[ÉgÇÃÉhÉâÉCÉoÇ™é¿ç€Ç…ÉNÉçÅ[ÉYÇ≥ÇÍÇÈÉ^ÉCÉ~ÉìÉOÇÕÅAÉVÉäÉAÉãÉ|Å[ÉgÇÉIÅ[ÉvÉìǵÇΩï˚ñ@Ç…ç∂âEÇ≥ÇÍÇ‹Ç∑ÅB
í èÌÇÕOTSndDisconnect () Ç≈ê⁄ë±ÇâèúǵNjÇ∑ÅiÉGÉìÉhÉ|ÉCÉìÉgÇÕT_IDLE èÛë‘Ç…Ç»ÇËÇ‹Ç∑ÅjÅB
éÛêgìIÇ…ÉVÉäÉAÉãÉ|Å[ÉgÇóòópǵǃǢÇÈèÍçáÇÕÅAOTUnbind () Ç≈ÉoÉCÉìÉhÇ™âèúǵNjÇ∑ÅB
Ç‹ÇΩÅAOTCloseProvider () Ç≈ÉGÉìÉhÉ|ÉCÉìÉgÇÉNÉçÅ[ÉYǵÇΩèÍçáLJÅAÉVÉäÉAÉãÉ|Å[ÉgÇÃÉhÉâÉCÉoÇ™ÉNÉçÅ[ÉYÇ≥ÇÍÇ‹Ç∑ÅB
ÉVÉäÉAÉãÉ|Å[ÉgÇÃãåAPIÇΔà·Ç¡ÇƒÅAOpen TransportÇÕÉVÉäÉAÉãÉ|Å[ÉgÇóòópǵǃǢÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇèÌÇ…äƒéãǵǃǢNjÇ∑ÅBÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÉVÉäÉAÉãÉ|Å[ÉgÇÃóòópíÜÇ…àŸèÌèIóπǵÇΩèÍçáÇ≈LJÅAÉGÉìÉhÉ|ÉCÉìÉgÇΔÉVÉäÉAÉãÉ|Å[ÉgÇÃÉhÉâÉCÉoÇÕÇ∑Ç◊ǃÉNÉçÅ[ÉYÇ≥ÇÍÇ‹Ç∑ÅBÇΩÇæÇµÅAÉAÉvÉäÉPÅ[ÉVÉáÉìà»äOÅiÉRÅ[ÉhÉäÉ\Å[ÉXÇ‚ã§óLÉâÉCÉuÉâÉäÅjÇÕÉÅÉÇÉäÇ©ÇÁÉAÉìÉçÅ[ÉhÇ≥ÇÍÇÈëOÇ…ïKÇ∏CloseOpenTransport () ÇåƒÇ—èoÇ∑ïKóvǙdžÇËÇ‹Ç∑ÅB
ÉVÉäÉAÉãÉ|Å[ÉgÇè˜ÇÈ
èdóvÅF
DZDZÇ≈ÇÕOpen Transportè„Ç≈ÇÃÉVÉäÉAÉãÉ|Å[Égä«óùÇÃñ{óàÇÃédëgÇâê‡ÇµÇƒÇ¢Ç‹Ç∑ÅBǵǩǵÅAOpen TransportÇÃç≈êVÉoÅ[ÉWÉáÉìÅiDZÇÃÉeÉbÉNÉmÅ[ÉgÇ™èëÇ©ÇÍÇΩéûÇÕ1.3ÅjÇÕÉoÉOǙdžÇËÅAÉVÉäÉAÉãÉ|Å[ÉgÇÃä«óùǙǧNjÇ≠ìÆçÏǵNjÇπÇÒÅBÉAÉvÉäÉPÅ[ÉVÉáÉìë§Ç©ÇÁå©ÇÈÇΔÅAéÛêgìIÇ…ÉVÉäÉAÉãÉ|Å[ÉgÇóòópǵǃǢÇÈÉvÉçÉOÉâÉÄǙdžÇÈÇΔÅAó·Ç¶ÇªÇÃÉVÉäÉAÉãÉ|Å[ÉgÇ™égópâ¬î\Ç≈džǡǃLJÅAOTYieldPortRequest () ÇÕèÌÇ…kBUSYErr Çï‘ǵNjÇ∑ÅB |
ÉVÉäÉAÉãÉ|Å[ÉgÇÃãåAPIÇΔà·Ç¡ÇƒÅAOpen TransportÇÕÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[ÉVÉáÉìópÇÃAPIÇîıǶǃǢNjÇ∑ÅBÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[ÉVÉáÉìÇÕà»â∫ÇÃÇÊǧǻéËèáÇ≈çsÇÌÇÍÇ‹Ç∑ÅF
- ÉVÉäÉAÉãÉ|Å[ÉgÇéÛêgìIÇ…óòópÇ∑ÇÈÉvÉçÉOÉâÉÄÇÕÉVÉäÉAÉãÉ|Å[ÉgÇäJǢǃÅA
qlen = 1 Ç≈ÉoÉCÉìÉhǵNjÇ∑ÅBÇ∑ÇÈÇΔÅAäOïîÇ©ÇÁÇÃê⁄ë±Ç…ëŒÇµÇƒÅAë“ã@èÛë‘ÇΔÇ»ÇËÇ‹Ç∑ÅB
- ÉVÉäÉAÉãÉ|Å[ÉgÇí èÌÇ…óòópÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕ
OTConnect () Ç≈ÉVÉäÉAÉãÉ|Å[ÉgÇäJÇ´Ç‹Ç∑ÅBǵǩǵÅAë“ã@ǵǃǢÇÈÉvÉçÉOÉâÉÄÇ™ä˘Ç…ÉVÉäÉAÉãÉ|Å[ÉgÇóòópǵǃǢÇÈÇΩÇflÅAOTConnect () ÇÕkBUSYErr ÉGÉâÅ[Çï‘ǵNjÇ∑ÅB
- DZÇÃÉGÉâÅ[Ç…ëŒÇµÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕ
OTYieldPortRequest () ÇåƒÇ—èoǵNjÇ∑ÅB
- Open TransportÇÕéwíËÇ≥ÇÍÇΩÉVÉäÉAÉãÉ|Å[ÉgÇéÛêgìIÇ…óòópǵǃǢÇÈÉvÉçÉOÉâÉÄÅi
OTRegisterAsClient () Ç≈ìoò^Ç≥ÇÍǃǢÇÈÉvÉçÉOÉâÉÄÇ…å¿ÇÈÅjÇ…kOTYieldPortRequest í ímÇëóÇËÇ‹Ç∑ÅB
- DZÇÃéûÅAë“ã@ǵǃǢÇÈÉvÉçÉOÉâÉÄÇÕÉVÉäÉAÉãÉ|Å[ÉgÇè˜ÇÈÇ©ÅAóvãÅÇãëî€Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
- ë“ã@ǵǃǢÇÈÉvÉçÉOÉâÉÄÇ™óvãÅÇãëî€ÇµÇΩèÍçáÅA
OTYieldPortRequest () ÇÕÉGÉâÅ[Çï‘ǵÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹ÇπÇÒÅBDZÇÃéûÅAOTYieldPortRequest () ÇÕÉVÉäÉAÉãÉ|Å[ÉgÇÃóòópÇãëî€ÇµÇΩÉvÉçÉOÉâÉÄñºÇΔãëî€óùóRÇÉäÉXÉgDžǵǃï‘ǵNjÇ∑ÅBÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕDZÇÃèÓïÒÇ…äÓÇ√ǢǃÅuÉVÉäÉAÉãÉ|Å[ÉgégópíÜÅvÉ_ÉCÉAÉçÉOÇï\é¶Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
- ë“ã@ǵǃǢÇÈÉvÉçÉOÉâÉÄÇ™Ç∑Ç◊ǃÉVÉäÉAÉãÉ|Å[ÉgÇè˜Ç¡ÇΩèÍçáÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇÃéûÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕì¡íËÇÃéûä‘ì‡ÅiÇ®ÇÊǪ10ïbÅjÇ…ÉVÉäÉAÉãÉ|Å[ÉgÇäJÇ©Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅi
qlen = 1 Ç≈ÉoÉCÉìÉhÇ∑ÇÈÇ©ÅAOTConnect () ÇåƒÇ—ÇæÇµÇ‹Ç∑ÅjÅBì¡íËéûä‘ì‡Ç…ÉVÉäÉAÉãÉ|Å[ÉgÇäJǩǻǢÇΔÅAÉVÉäÉAÉãÉ|Å[ÉgÇÃóòópåèÇÕçƒÇ—ë“ã@ǵǃǢÇΩÉvÉçÉOÉâÉÄÇ…à⁄ÇËÇ‹Ç∑ÅB
- ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÉVÉäÉAÉãÉ|Å[ÉgÇäJÇ≠ÇΔÅAë“ã@ǵǃǢÇΩäeÉvÉçÉOÉâÉÄÇ…ÇÕ
kOTProviderIsDisconnected í ímÇ™ëóÇÁÇÍÇ‹Ç∑ÅB
- ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÉVÉäÉAÉãÉ|Å[ÉgÇégÇ¢èIÇÌǡǃï¬Ç∂ÇÈÇΔÅAë“ã@ǵǃǢÇΩäeÉvÉçÉOÉâÉÄÇ…ÇÕ
kOTProviderIsReconnected í ímÇ™ëóÇÁÇÍÇ‹Ç∑ÅB
è„ãLÇÃéËèáÇÕè≠ǵï°éGÇ≈Ç∑Ç™ÅAInside Macintosh: Open TransportÇ≈ÇÕè⁄ǵÇ≠âê‡Ç≥ÇÍǃǢNjÇ∑ÅB
óºÉAÅ[ÉrÉgÉåÅ[É^ÇÃï®åÍ
ÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇÕMac OSÇÃíÜÇ≈ÇÕLJǡÇΔLJímÇÁÇÍǃǢǻǢïîï™ÇÃàÍǬÇΔåæÇ¶ÇÈǩLJǵÇÍÇ‹ÇπÇÒÅBàÍǬÇÃóùóRÇÕÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç™Mac
OSÇÃïWèÄÉCÉìÉXÉgÅ[ÉãÇ≈ÇÕÇ»Ç≠ÅAAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÇ…ÇÊǡǃÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇÈDZÇΔÇ≈Ç∑ÅBDZDZÇ≈ÇÕÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇÃèdóvê´ÇΔóºÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇÃã@î\DžǬǢǃâê‡ÇµÇ‹Ç∑ÅB
ñ‚ëËÇÃî≠í[
Mac OSÇÃÉfÉoÉCÉXÉ}ÉlÅ[ÉWÉÉÇÕå≥ÅXäÔñ≠Ç»ê›åvÇ™Ç≥ÇÍǃǢNjǵÇΩÅBì¡íËÇÃÉhÉâÉCÉoÇ™äJÇ©ÇÍÇÈÇΔÅAǪÇÃå„OpenDriver () ÇÕǪÇÃÉhÉâÉCÉoÇÃrefNum Çï‘Ç∑ÇæÇØÇ≈ÅAÉhÉâÉCÉoë§Ç…ÇÕÇ»ÇÒÇÃí ímLJÇ≥ÇÍÇ‹ÇπÇÒÅBDZÇÍÇÕëΩÇ≠ÇÃÉhÉâÉCÉoÅió·Ç¶ÇŒÉtÉçÉbÉsÅ[ÉfÉBÉXÉNÉhÉâÉCÉoÅjÇ…ÇΔǡǃñ‚ëËÇΔÇ»ÇÈDZÇΔÇÕdžÇËÇ‹ÇπÇÒÇ™ÅAÉVÉäÉAÉãÉ|Å[ÉgÉhÉâÉCÉoÇÃÇÊǧDžÅAèÌÇ…àÍǬÇÃÉNÉâÉCÉGÉìÉgǵǩÉTÉ|Å[ÉgǵǻǢÉhÉâÉCÉoÇ…ÇΔǡǃÅAÉVÉäÉAÉãÉ|Å[ÉgÇÅuèäóLÅvÇ≈ǴǻǢêßå¿ÇÕëÂÇ´Ç»ñ‚ëËÇ≈Ç∑ÅB
MultiFinderÇÃìoèÍÇ‹Ç≈MacintoshÇÕàÍìxÇ…àÍǬÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìǵǩëñÇÁÇπÇÈDZÇΔÇ™Ç≈Ç´Ç‹ÇπÇÒÇ≈ǵÇΩÅBè]ǡǃÅAìÆçÏíÜÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÉVÉäÉAÉãÉ|Å[ÉgÇèäóLÇ∑ÇÈÉÇÉfÉãÇ™ê¨óßǵNjǵÇΩÅBǵǩǵÅAMultiFinderÇÃìoèÍÇ≈ï°êîÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ìØéûÇ…ëñÇÈèÛãµÇΔÇ»ÇËÅAÉVÉäÉAÉãÉ|Å[ÉgÇÃèäóLñ‚ëËÇ™î≠ê∂ǵNjǵÇΩÅB
ñ‚ëËÇ÷ÇÃëŒâû
DZÇÃñ‚ëËÇ÷ÇÃëŒâûÇÕíPèÉÇ≈ǵÇΩÅBÉVÉäÉAÉãÉ|Å[ÉgÇ™ä˘Ç…äJǢǃǢÇÍÇŒÅAëºÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™óòópǵǃǢÇÈÇΔåæÇ§Ç±ÇΔÇ»ÇÃÇ≈ÅADZÇÃèÍçáÇÕÉVÉäÉAÉãÉ|Å[ÉgÇÃégópÇçTǶÇÈDZÇΔÇ≈âåàǵNjǵÇΩÅBÉfÉoÉCÉXÇÃÉÜÉjÉbÉgÉeÅ[ÉuÉãÇíºê⁄éQèΔÇ∑ÇÈïKóvǙdžǡÇΩÇΩÇflÅAäÔóÌÇ»âåàçÙÇΔÇÕåæÇ¶Ç‹ÇπÇÒÇ≈ǵÇΩÇ™ÅAìÆçÏè„ÇÃñ‚ëËÇÕdžÇËÇ‹ÇπÇÒÇ≈ǵÇΩÅB
êVÇΩÇ»ñ‚ëË
AppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÇÃìoèÍÇ≈êVÇΩÇ»ñ‚ëËÇ™î≠ê∂ǵNjǵÇΩÅBAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÇÕÉoÉbÉNÉOÉâÉEÉìÉhÇ≈ë“ã@ǵÅAìdòbǙǩǩǡǃÇ≠ÇÈÇÃÇë“ÇøéÛÇØÇÈã@î\ǙdžÇËÇ‹Ç∑ÅBǵǩǵÅAAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÇ™ë“ã@ǵǃǢÇÈä‘ÇÕÅAÉVÉäÉAÉãÉ|Å[ÉgÇ™èÌÇ…égÇÌÇÍǃǢÇÈÇΩÇflÅAAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÇÃë“ã@ÉÇÅ[ÉhÇêÿÇÁǻǢÇΔÅAÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈí èÌÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕóòópÇ≈Ç´Ç‹ÇπÇÒÇ≈ǵÇΩÅB
DZÇÃñ‚ëËÇÕÅAç≈èâÇÃñ‚ëËÇ÷ÇÃëŒâûçÙÇÃåãâ ÅAâåàÇ∑ÇÈDZÇΔÇ™îÒèÌÇ…ìÔǵÇ≠Ç»ÇËNjǵÇΩÅBè„ãLÇÃÉÇÉfÉãÇ…è]ǡǃê›åvÇ≥ÇÍÇΩÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÉfÉoÉCÉXÇÃÉÜÉjÉbÉgÉeÅ[ÉuÉãÇÉ`ÉFÉbÉNÇ∑ÇÈÇÊǧDžǻÇËNjǵÇΩÇ™ÅAAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÇ™ä˘Ç…ÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈÇΩÇflÅADZÇÍÇÁÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÉVÉäÉAÉãÉ|Å[ÉgÇégópíÜÇΔå©Ç»ÇµÅAOpenDriver
() LJåƒÇ—ÇæÇµÇ‹ÇπÇÒÅBAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÇÕÉVÉäÉAÉãÉ|Å[ÉgÇ™óòópÇ≥ÇÍÇÊǧÇΔǵǃǢÇÈDZÇΔÇä÷ímÇ≈ǴǻǢÇΩÇflÅAé©ìÆìIÇ…ë“ã@ÉÇÅ[ÉhÇêÿÇÈDZÇΔLJïsâ¬î\Ç≈ǵÇΩÅB
êVÇΩÇ»ñ‚ëËÇ÷ÇÃëŒâû
DZÇÃñ‚ëËDžǬǢǃÇÕ2íiäKÇÃëŒçÙÇ™ÇΔÇÁÇÍNjǵÇΩÅBÇ‹Ç∏ÅAÉfÉxÉçÉbÉpÇ™ÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈç€ÇÃÉãÅ[ÉãÇ™ïœÇÌÇËNjǵÇΩÅBDZÇÃÉãÅ[ÉãÇÕè„ãLÇ≈LJèqÇ◊ÇÁÇÍǃǢNjÇ∑Ç™ÅADZDZÇ≈åJÇËï‘ǵNjÇ∑ÅB
ÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç™ë∂ç›Ç∑ÇÈèÍçáÇÕOpenDriver () Çíºê⁄åƒÇ—èoǵǃÉVÉäÉAÉãÉ|Å[ÉgÇäJÇØÅBë∂ç›ÇµÇ»Ç¢èÍçáÇÕÉÜÉjÉbÉgÉeÅ[ÉuÉãÇéQèΔǵǃÅAÉhÉâÉCÉoÇ™ä˘Ç…äJǢǃǢǻǢèÍçáÇæÇØÉVÉäÉAÉãÉ|Å[ÉgÇäJÇØÅB
2Ǭñ⁄Ç…ÅAAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÇÕÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇΔÇΔLJDžèoâ◊Ç≥ÇÍNjǵÇΩÅBÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇÕ_Open ÇΔ_Close ÇÉpÉbÉ`ǵǃÅAÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇäƒéãǵNjÇ∑ÅBÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÉVÉäÉAÉãÉ|Å[ÉgÇäJÇ≠ÇΔÅAÉVÉäÉAÉãÉ|Å[ÉgÇÕǪÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃèäóLï®ÇΔÇ»ÇËÅAëºÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ìØÇ∂ÉVÉäÉAÉãÉ|Å[ÉgÇäJDZǧÇΔÇ∑ÇÈÇΔÅAÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇÕportInUse ÉGÉâÅ[Çï‘ǵNjÇ∑ÅB
íêÅF
ÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç™ï‘Ç∑portInUseÉGÉâÅ[ÉRÅ[ÉhÇÕÉVÉäÉAÉãÉnÅ[ÉhÉEÉFÉAÇ™LocalTalkǻǫÇÃëºÇÃÉhÉâÉCÉoÇ≈égÇÌÇÍǃǢÇÈèÍçáÇ…ï‘Ç∑portInUseÇΔìØólÇ≈Ç∑ÅBÉGÉâÅ[ÉRÅ[ÉhÇÕìØÇ∂Ç≈LJÅAÉGÉâÅ[ÇÃèÛãµÇÕëÂÇ´Ç≠à·Ç¢Ç‹Ç∑ÅBÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇÃportInUseÇÕëºÉvÉçÉZÉXÇ…ÇÊÇÈÉVÉäÉAÉãÉ|Å[ÉgÇÃóòópÇà”ñ°ÇµÇ‹Ç∑ÅBÉVÉäÉAÉãÉhÉâÉCÉoÇÃportInUseÇÕÉVÉäÉAÉãÉnÅ[ÉhÉEÉFÉAÇ™ëºÇÃÉhÉâÉCÉoÇ…óòópÇ≥ÇÍǃǢÇÈDZÇΔÇà”ñ°ÇµÇ‹Ç∑ÅB |
ÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇÕAppleÉäÉÇÅ[ÉgÉAÉNÉZÉX1.0ÇÃàÍïîÇΔǵǃèâÇflǃèoâ◊Ç≥ÇÍNjǵÇΩÅBÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇÕAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXÇÃLink
Tool ManagerÇóòópǵǃǢNjÇ∑Ç™ÅALink Tool Manageré©ëÃÇÃAPIÇÕåˆäJÇ≥ÇÍǃǢNjÇπÇÒÅB
Ç≥ÇÁÇ…êVǵǢëŒçÙ
ÉRÉìÉsÉÖÅ[É^ãΔäEÇÕê√ìIǻLJÇÃÇ≈ÇÕǻǢÇÃÇ≈ÅAMac OSLJÅAAppleÉäÉÇÅ[ÉgÉAÉNÉZÉXLJÉoÅ[ÉWÉáÉìÉAÉbÉvǵǃǢNjÇ∑ÅBAppleÉäÉÇÅ[ÉgÉAÉNÉZÉX3.0Ç≈ÇÕÅALink
Tool ManagerÇΔÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Çñ≥Ç≠Ç∑ï˚å¸Ç≈ê›åvÇ≥ÇÍǃǢNjǵÇΩÅBǵǩǵÅAÉfÉxÉçÉbÉpÇÕÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç…äµÇÍǃǢÇΩÇΩÇflÅAǢǴǻÇËOpenDriver () ÇåƒÇ—èoÇ∑ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ëΩêîdžÇËÅAÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Çñ≥Ç≠Ç∑ÇΔDZÇÍÇÁÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕëºÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇΔê⁄êGǵǃǵNjǧã∞ÇÍdžÇËNjǵÇΩÅB
DZÇÃÇΩÇflÅAAppleÉäÉÇÅ[ÉgÉAÉNÉZÉX3.0Ç…ÇÕâflãéÇÃÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇÃã@î\Çä‹ÇfiÅAêVǵǢÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÅiOpenTpt Serial ArbitratorÅjÇ™ì±ì¸Ç≥ÇÍNjǵÇΩÅBèâë„ÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇΔìØólÅA_Open ÇΔ_Close ÇÕÉpÉbÉ`Ç≥ÇÍǃǮÇËÅAÉVÉäÉAÉãÉ|Å[Égä«óùÇ™çsÇÌÇÍÇ‹Ç∑ÅBè]ǡǃÅAè„ãLÇÃÉãÅ[ÉãÇÕïœÇÌÇËÇ‹ÇπÇÒÅB
íêÅF
OpenTpt Serial ArbitratorÇÕOT/PPP 1.0Ç≈èâÇflǃìoèÍǵNjǵÇΩÅBǵǩǵÅAOT/PPPÇÕíPÇ…AppleÉäÉÇÅ[ÉgÉAÉNÉZÉX3.0ÇÃèkè¨î≈Ç»ÇÃÇ≈ÅADZDZÇ≈ÇÕìØìôÇÃÉ\ÉtÉgÉEÉFÉAÇΔå©Ç»ÇµÇ‹Ç∑ÅB |
íêÅF
êVãåÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç™óºï˚ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈèÍçáÇÕǫǧÇ≈ǵÇÂǧǩÅHïWèÄÇÃMac OS 8ÉCÉìÉXÉgÅ[ÉâÇ≈OT/PPPÇΔAppleÉäÉÇÅ[ÉgÉAÉNÉZÉX2.1Çóºï˚ÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈÇΔDZÇÃÇÊǧǻéñë‘Ç…Ç»ÇËÇ‹Ç∑ÅBìöǶÇÕÅAãåÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç™óDêÊÇ≥ÇÍÇ‹Ç∑ÅB |
íêÅF
ãåÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Ç‚OpenTpt Serial ArbitratorÇÕÉvÉçÉZÉXÉ}ÉlÅ[ÉWÉÉÇÃóLñ≥ÇämîFÇ≥Ç∏Ç…ÅA_Open ÇÃÉpÉbÉ`ì‡Ç©ÇÁÉvÉçÉZÉXÉ}ÉlÅ[ÉWÉÉÇåƒÇ—èoǵǃǢNjǵÇΩÅBåãâ ÇΔǵǃÅAãNìÆéûÇ…ã@î\ägí£Ç™ÉVÉäÉAÉãÉ|Å[ÉgÇóòópǵÇÊǧÇΔÇ∑ÇÈÇΔÅAÉVÉXÉeÉÄÇ™ÉNÉâÉbÉVÉÖǵǃǵNjǢNjǵÇΩÅBDZÇÃÉoÉOÇÕÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇÃóºÉoÅ[ÉWÉáÉìDžǮǢǃíºÇ≥ÇÍǃǢNjÇ∑ÅB |
écÇÈñ‚ëË
Mac OSÇÕÇ‹ÇæÉVÉäÉAÉãÉ|Å[Égã…äyÇ…ìûíBǵǃǢNjÇπÇÒÅBOpenTpt Serial ArbitratorÇ…ÇÕÇ¢Ç≠ǬǩÇÃñ‚ëËì_Ç™écǡǃǢNjÇ∑ÅB
- ÉVÉäÉAÉãÉ|Å[ÉgÇÃèäóLé“ÇÕ
ProcessSerialNumber Åiè⁄ç◊DžǬǢǃÇÕInside Macintosh: ProcessesÇéQèΔÅjÇégǡǃä«óùÇ≥ÇÍÇ‹Ç∑Ç™ÅADZÇÍÇÕîÒÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉvÉçÉOÉâÉÄÇ™ÉVÉäÉAÉãÉ|Å[ÉgÇóòópǵÇΩèÍçáÇ…ñ‚ëËÇΔÇ»ÇËÇ‹Ç∑ÅBó·Ç¶ÇŒÅASystemTask ÇÉpÉbÉ`ǵǃÅAÉpÉbÉ`ì‡ïîÇ©ÇÁÉVÉäÉAÉãÉ|Å[ÉgÇêîï™óòópǵÇΩÇΔǵNjÇ∑ÅBÉVÉäÉAÉãÉ|Å[ÉgÇäJÇ¢ÇΩéûÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìAÇÃÉRÉìÉeÉNÉXÉgì‡Ç≈džǡǃLJÅAï¬Ç∂ÇΩéûÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìBÇÃÉRÉìÉeÉNÉXÉgì‡Ç©Ç‡ÇµÇÍÇ‹ÇπÇÒÅBDZÇÍÇÕÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^Çç¨óêÇ≥ÇπÇ‹Ç∑ÅB
- ãåÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇΔOpenTpt Serial Arbitratorä‘ÇÕå¿ÇÁÇÍÇΩÇ‚ÇËéÊÇËǵǩÇ≥ÇÍÇ‹ÇπÇÒÅBDZÇÃÇΩÇflÅAOpen TransportÇ≈ÉVÉäÉAÉãÉ|Å[ÉgÇéÛêgìIÇ…óòópÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅAãåAPIÅi
OpenDriver () ÅjÇ≈ÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ÉVÉäÉAÉãÉ|Å[ÉgÇè˜ÇÈDZÇΔÇ™Ç≈Ç´Ç‹ÇπÇÒÅB
- è„ãLÇÃêßå¿ÇÃÇΩÇflÅAAppleÉäÉÇÅ[ÉgÉAÉNÉZÉX3.0Ç™ÉVÉäÉAÉãÉ|Å[ÉgÇóòópǵǃǢÇÈä‘ÇÕÅAZ-TermǻǫÇÃãåÉVÉäÉAÉãÉ|Å[ÉgAPIÇóòópǵǃǢÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÉVÉäÉAÉãÉ|Å[ÉgÇóòópÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹ÇπÇÒÅB
- Open TransportÇÃÉVÉäÉAÉãÉ|Å[ÉgÉAÅ[ÉrÉgÉåÅ[É^ÇÕÉoÉOÇÃÇΩÇflÅAê≥ǵÇ≠ìÆçÏǵNjÇπÇÒÅBǵǩǵÅAçKÇ¢APIÇåƒÇ—èoÇ∑ÇÃÇÕà¿ëSÇ»ÇÃÇ≈ÅAOpen TransportǙǢÇ∏ÇÍíºÇÈDZÇΔÇå©âzǵǃÅAAPIÇóòópÇ∑ÇÈDZÇΔÇä©ÇflÇ‹Ç∑ÅB
DZÇÃÉeÉbÉNÉmÅ[ÉgÇÕè„ãLÇÃñ‚ëËDžǬǢǃëŒâûÇ™Ç≥ÇÍÇÈÇΔÇΔLJDžçXêVǵǃǢÇ≠ó\íËÇ≈Ç∑ÅB
óvñÒ
Mac OSÇÃÉVÉäÉAÉãÉ|Å[ÉgÇÕǧNjÇ≠ÉvÉçÉOÉâÉÄä‘Ç≈ã§óLÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÉVÉäÉAÉãÉ|Å[ÉgÇÃê^ÇÃèäóLé“ÇÕÉÜÅ[ÉUÇ≈Ç∑Ç™ÅAÉvÉçÉOÉâÉÄìØémÇ™ÉVÉäÉAÉãÉ|Å[ÉgÇǧNjÇ≠óòópǵǻǢÇΔÉÜÅ[ÉUÇÕïsñûÇ…Ç»ÇËÇ‹Ç∑ÅBDZÇÃÉeÉbÉNÉmÅ[ÉgÇ≈èqÇ◊ÇÁÇÍǃǢÇÈÉãÅ[ÉãÇ…è]ǶnjÅAÉRÉìÉsÉÖÅ[É^ÇÃóòópâ¬î\Ç»ÉVÉäÉAÉãÉ|Å[ÉgÇê≥ǵÇ≠îFéØÇµÅAëºÉvÉçÉOÉâÉÄÇΔLJǧNjÇ≠ã§ë∂Ç≈Ç´ÅAê¢äEíÜÇÃMacintoshÉÜÅ[ÉUÇ…à§Ç≥ÇÍÇÈDZÇΔÇ≈ǵÇÂǧÅB
éQçlï∂å£
|
|